Cosmos SDK (トランザクションライフサイクル)
Txのコミット
上がってきたTxはバリデータがトランザクションを検証するために状態遷移を実行する前のステップを実行し、ブロックを確認するために署名する。バリデーターではないフルノードはコンセンサスに参加しない
十分な数のバリデーター票(投票力で加重した2/3+プレコミット)を獲得すると、フルノードはブロックチェーンに追加する新しいブロックをコミットし、アプリケーションレイヤーの状態遷移を確定する。
x自体は、[]バイト形式でブロックに格納され、ブロックチェーンに追加される
Txの同期
Txを受信した各フルノードは、有効性をチェックするためにCheckTxと呼ばれるABCIメッセージをアプリケーション・レイヤーに送信します。
Txがチェックに合格すると、abci.ResponseCheckTxを受信し、そのTxはノードのMempoolに保持され、ブロックに含まれることが待たれます(誠実なノードは、Txが無効であることが判明した場合、Txを破棄します)
フルノードはCheckTxの間、Txに対してステートレス・チェックとステートフル・チェックを実行します。これらは、無駄な計算を避けるために、できるだけ早い段階で無効なトランザクションを特定し、拒否することを目的としています。
例えば、関連する値が存在して取引が可能であること、アドレスに十分な資金があること、送信者が取引を行うための権限を持っているか、正しい所有権を持っているかなどをチェックします。
CheckTx中にTxが失敗した場合、そのTxは廃棄され、トランザクションのライフサイクルはそこで終了する。そうでなければ、CheckTxを正常に通過した場合、デフォルトのプロトコルでは、Txが次のブロックに含まれる候補となるように、それをピアノードに中継し、Mempoolに追加します。
ValidateBasic
TxからMsgが抽出され、ステートレスサニティチェックが実行される
AnteHandler
ValidateBasicのチェックが終わると、AnteHandlersが実行される
署名の検証、ガスの計算、手数料の控除など、ブロックチェーン取引に関連するコアなオペレーションを実行